import torch
from torchvision import transforms
from PIL import Image
import matplotlib.pyplot as plt
import pyttsx3  # 导入语音库
数据预处理 = transforms.Compose([
    transforms.Resize(256),  # 将图像大小调整为 256x256
    transforms.CenterCrop(224),  # 从中心裁剪出 224x224 的图像
    transforms.ToTensor(),  # 将图像转换为张量
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),  # 归一化
])
# 加载模型
模型 = torch.load('模型文件.pth',weights_only=False)
模型.eval()  # 将模型设置为评估模式
# 指定设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
模型.to(device)
# 读取图像
images = ['大象.jpg', '猫.jpg', '松鼠.jpg', '牛.jpg', '狗.jpg', '猫.jpg']
for image_path in images:
    path = 'img/'+image_path  # 替换为你的图像路径
    originalPath = path  # 替换为你的图像路径
    image = Image.open(path).convert('RGB')  # 确保图像是RGB格式
    # 预处理图像
    image = 数据预处理(image).unsqueeze(0)  # 添加批量维度
    image = image.to(device)
    # 进行预测
    with torch.no_grad():
        output =模型(image)
        _, predicted = torch.max(output, 1)
    # 类别名称
    class_names = [
        "大象", "松鼠", "牛", "狗", "猫", "羊", "蜘蛛", "蝴蝶", "马", "鸡"
    ]
    # 读取图像
    image = Image.open(originalPath).convert('RGB')  # 确保图像是RGB格式
    # 显示原始图像
    plt.imshow(image)
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题
    plt.title("原始图像")
    plt.show()
    #显示预测结果
    predicted_class = class_names[predicted.item()]
    print(f'图片识别结果是: {predicted_class}')
    pyttsx3.speak("预测结果是")
    pyttsx3.speak(predicted_class)